package com.le.tester.imooc.masterJUC.collections.copyonwrite;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 描述：copy on write array list demo
 */
public class CopyOnWriteArrayListDemo1 {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        //将原来的内存块中复制一份进行操作，原来并没有改变，那么在改变完成之后呢，引用再去指向修改完的内存地址
        //那么如果在get的时候，数据就有可能不是最新的数据,只能保证最终数据的一致性
        //内存的占用地址可能会比较大一点
        CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");

        Iterator<String> stringIterator = list.iterator();
        while (stringIterator.hasNext()) {
            System.out.println("list is " + list);
            String next = stringIterator.next();
            System.out.println(next);
            if (next.equals("2")) {
                //arrayList不让你在迭代的时候进行remove()
                list.remove("5");
            }
            if (next.equals("3")) {
                list.add("3 found");
            }
        }
    }

}
